package com.example.utils;

import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.Claim;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.auth0.jwt.interfaces.JWTVerifier;

import java.util.Date;
import java.util.Map;

public class JwtUtil {
    // 密钥（实际项目中建议放在配置文件，避免硬编码）
    private static final String KEY = "itheima";

    /**
     * 生成Token
     * @param claims 业务数据（载荷）
     * @return 生成的Token字符串
     */
    public static String genToken(Map<String, Object> claims) {
        return JWT.create()
                // 存入业务数据
                .withClaim("claims", claims)
                // 设置过期时间（12小时）
                .withExpiresAt(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 12))
                // 使用HS256算法签名
                .sign(Algorithm.HMAC256(KEY));
    }

    /**
     * 解析Token
     * @param token 待解析的Token字符串
     * @return 解析出的业务数据（载荷）
     */
    public static Map<String, Object> parseToken(String token) {
        // 创建验证器
        JWTVerifier verifier = JWT.require(Algorithm.HMAC256(KEY))
                .build();
        // 验证Token并解码
        DecodedJWT decodedJWT = verifier.verify(token);
        // 获取业务数据
        Claim claim = decodedJWT.getClaim("claims");
        return claim.asMap();
    }
}